package com.atde._03_creational_design_patterns.singleton.type04;


/**
 * @BelongsProject: hsp_java_design_mode
 * @BelongsPackage: com.atde._03_creational_design_patterns.singleton.type04
 * @Author: Del
 * @CreateTime: 2025-05-26  02:22
 * @Description: 单例模式写法4 -- 懒汉式（线程安全的，同步方法）
 * @Version: 1.0
 */
public class SingletonTest04 {
    public static void main(String[] args) {

    }
}

/**
 * 懒汉式（线程安全的，同步方法）
 * 1）解决了线程不安全的问题
 * 2）效率太低了，每个线程在想获得类的实例的时候，都执行了getInstance()方法都要进行同步。
 * 而其实这个方法只执行一次实例化代码就够了，后面的想获得该类实例，直接return就行了。方法进行同步效率太低了。
 * 3）结论：在实际开发中，不推荐使用这种方式
 */
class Singleton {
    private static Singleton instance;

    // 1. 构造器私有化，避免外部new
    private Singleton() {}

    // 2. 提供一个静态的公有方法，当使用到该方法时，才去创建 instance
    // 即懒汉式，且加 synchronized 同步方法，解决了线程安全问题
    // 但是效率太低了，每个线程在想获得类的实例时候，执行 getInstance()方法都要进行同步。
    // 而其实这个方法只执行一次实例化代码就够了，后面的想获得该类实例，直接返回就行了。
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
